 La version numrique du sujet fournie en fichier texte (format *.txt) doit tre ouverte en tant que braille informatique. Elle sera affiche en braille 6 points. Lapplication  bloc-notes  des ordinateurs courants, ou des logiciels spcialiss peuvent tre utiliss.  dfaut, reportez-vous  la version en papier. 
Le candidat doit rdiger ses rponses sur un second fichier, et peut demander  un assistant ou  un secrtaire de recopier sa production de faon manuscrite sur une copie.
Un fichier en format *.pdf est galement fourni.
La page du document originale est indique par  PO 1  pour  page originale n1 . Les rfrences aux pages braille (sommaire, rfrences en cours de sujet) font rfrence au sujet braille emboss.  

po `1
`24-nsij`2me1
;l a;g
baccalkrat gn
!v d'?sei"em2 d spcialit
se0 `2024
numriq  sc.c5 *fmatiqs
!v ( jdi `20 ju* `2024
dure d l'!v: `3 hrs `30
l'ug d ' calcula)ice n'5 ps ktoris.
. q c sj v 5 'mis, aurz-v q'i 5 -6.
c sj -pte `15 pag5 numrot5 d `1  `15 4 ' v(s0 ogle. 4 ' v(s0 ? ;l a;g l sj -pte `44 pag5 numrot5 d `1  `44 `! `2 6,5 tactil5 ? f* d volume. l'?@ ds 6,5 tactil5 5 !pos h papi( th(mog2.
:fmm2 k code ;l, @ 5pac5  r@6ir !s2s 4 l'ogl 9t symboliss p @ si"5 `-'.
l sj 5 -pos d )s x(s *dpds.
l c,didat )/te @ )s x(s.swr
x( `1 `4
p^tie a: bas5 d dn5 `4
p^tie b: scuris1 `11
x( `2 `13
p^tie a: qqs 8tils `15
p^tie b: !r ap!e d r,gem2 `17
p^tie c: r,gem2 optimis p rcursivit `22
x( `3 `26
p^tie a: analyse ds 3a5 piste  dom/ne `27
p^tie b: '(e p fo ;ute `33
,nexe `41
po `2
x( `1 (`6 pts)
3 x( pte h ' not0 d bas5 d dn5 'lat0ns, l l,gage sql  @ !tocol5 d scuris1.
p^tie a: bas5 d dn5
l'nc d ct p^tie utilise @ mots ( l,gage sql s;v4s: :select, from, where, join, update, set, delete. l'at)ibut auto-increment p(met d'*:m?t( ktomatiqm u ?t 4 un t  l'*s(t0 d'u nl l.
bob, g .pose d'un )s 7d coect0 d cd-s r,gs h 6s tagr5 numrot5, a mis ? 6c un base d dn5. vc ' des:ipt0 ds )s rts d ct base dt @ 3s !im/r5 t " s8li"5  @ 3s ),gr5 *diq5 p u 0:
`;vr 6,e tactile no`1
' `1. *diq(, ac justific1, s'i kr3 " pb d sir l'at)ibut nom-artiste cm 3 !im/re 4 ' rt cd.
4 ' s;te,  :sidre @ 3s ),gr5 s;v,t5:
-- cd.nom-artiste g rfr?ce l'at)ibut artiste.nom-artiste;
-- rangement.id-album g rfr?ce l'at)ibut cd.-id-album.
vc u x)3 ds ?regis)em2s ds rts cd, ^tiste  r,gem2 dfini5 6 hkt:
po `3
t cd:
`;taek linaris'
id-album; titre-album; nom-artiste; anne
`1 'master of puppets'; 'metallica'; `1986
`2 'the marshall mathers lp'; 'eminem'; `2000
`3 'wasting light'; 'foo fighters'; `2011
`4 'wishmaster'; 'nightwish'; `2001
`5 'dead letters'; 'the rasmus'; `2003
`6 'somewhere in time'; 'iron maiden'; `1986
t ^tiste:
`;taek linaris'
nom-artiste; pays; style
'nightwish'; 'finlande'; 'metal'
'foo fighters'; 'etats-unis'; 'rock'
'metallica'; 'etats-unis'; 'metal'
'iron maiden'; 'royaume-uni'; 'metal'
'eminem'; 'etats-unis'; 'rap'
'the rasmus'; 'finlande'; 'rock'
t r,gem2:
`;taek )/t ? colne'
id-album numero-etagere
`1  `2
`2  `1
`3  `1
`4  `3
`5  `3
`6  `2
po `4
`2. :ire c q r?ve ' 'q2te s;v,te lq' l'ap6iq kx x)3s ci-deus.
select nom-artiste
from artiste
where pays
`" "finlande";
`3. :ire ! c q r?ve ' 'q2te s;v,te.
select cd.annee
from cd
join artiste
on cd.nom-artiste
`" artiste.nom-artiste
where artiste.style
`" "metal";
bob s r?d -pte q l'album wishmaster 5 ?r sti ? `2000.
`4. dn( ' 'q2te q'i dt :ire  m)  jr sa base d dn5.
`5. dn( ' 'q2te q'i dt :ire  affi( @ t)s d w @ albums d "metal" r,gs h l'tagre dt l numro 5 `1.
bob a v?du l'album dead letters ( 7p the rasmus. pq'i s'agi3 ( sl album d c 7p q'i pod3, i vt sup!im( w @ ?regis)em2s g 9t ! *uls 4 @ )s rts.
`6. dn( l'or4e 4 ll i dt @ sup!im( ? x6iq4 p, ! :ire ' 'q2te crespd4  ' sup!e0 d l'album 4 ' rt cd.
p^tie b: scuris1
' base d dn5 d bob 5 hb(ge h u s(v kql i accde dp u 3.t h 9 ordinat pnl.  scuris( ' :nex0, u algorithme d if1em2 sym)iq 5 utilis.
`7. x6iq( ;ivm c q'5 u algorithme d if1em2 sym)iq.
' 3 d if1em2, note c 4 ' s;te, 5 sie alatrem2 p l s(v  q :nex0 dp u 3.t. af q l if1em2  l dif1em2 p;e s f  !me, l s(v dt ?voy( k 3.t ' 3 c d fa scurise.
`8. rappel( ;ivm c q'5 u algorithme d if1em2 asym)iq.
 suppose ! q bob possde un 3 puiq  un 3 !ive. ' 3 puiq d bob 5 suppose :nue p l s(v.
`9. !pos( al un solut0  q l s(v p;e ?voy( ' 3 c  l'ordinat d bob d fa scurise, c'e--d  q sl bob p;e dif1( ' 3 ?voye.
po `5
x( `2 (`6 pts)
3 x( pte h ' !7amm1 or.te ojs, @ )is, @ algorithm5 @8ts, ' rcursivit  @ a(t0s.
3 x( 5 -pos d )s p^ti5 dt @ dx drs 9t *dpd5 ?)e zs.
4 3 x(, l'?t2te ds fs 5 d:it ac l ty ds ojs ? param)e  l ty d l'oj r?voy. ai ' f pc g !?d u param)e 2ow4 ?x*  u ?t ?n* ! g r?ve l 2ow4 ?x**n*, a  ?t2te ?puissance(x: float, n: int)  --@ float*
un ?)e!ise )pte ds m^,dis5. z s8h/te maximis( 9 !f ? optimis4 l r@6iage d ss moy?s d )pt.  :sidre q'u moy? d )pt 5 limit p 9 volume (x!im ? li)5). q m^,dise 5 caractrise p 9 !x (en ros)  9 volume *divisie (en li)5).
supposs q' /t )s m^,dis5 caractris5 p @ c6s (!x, volume) s;v4s:
-- `m?1"(100,10),
-- `m?2"(100,10) 
-- `m?3"(250,20).
* l moy? d )pt pt ?c ^g( `25 li)5, i vkt mx ^g( ' m^,dise numro `3 g rpe `250 e  l'?)e!ise 6t q ^g( @ m^,dis5 numros `2  `3 g rappt2 `200 e k total  l 2 5pace utilis.
p^tie a: qqs 8tils
o s8h/ts dfinir un 3ae ?marchandise* dt q *st,ce dfinit un m^,dise pod4 dx at)ibuts ?ts ?prix*  ?volume*.
`1. -6t( l :s)uct g r?ve u oj ?marchandise*. utilis( l mot-3 ?assert* af q'un xcept0 st leve * l param)e ?v* n'5 ps s)ictm positif.
 rapp q * ?condition* 5 un x! python bool?ne s'valu4  ?true* 8 ?false*, l'*s)uct0 ?assert :d* d3?e un xcept0 qd ' :d s'value  ?false*.
class marchandise:
def --init--(self,
p: int, v: int) --@ 'marchandise':
`-'
`2. dn( un *s)uct0 g p(met d :( un vari ?m`1* '!s?t4 un m^,dise d'u volume d `7 li)5 co5t4 `20 e.
`3. !pos( un mthode
?ratio(self) --@ float* g r?ve l ratio !x/volume d'un m^,dise.
`4. !pos( un f ?prixliste(tab: list)  --@ int* g r?ve l !x cumul d l'?@ ds m^,dis5 fm4 l taek ?tab*.
po `6
p^tie b: !r ap!e d r,gem2 l )pt s8h/te maximis( 9 !f.  :sidre q o avs @ qa)e m^,dis5 dfini5 p @ c6s (!x, volume) s;v4s:
`m?1"(40,20),
`m?2"(210,70),
`m?3"(160,40) 
`m?4"(50,50).
`5. !cis( tts @ -bin/ss d m^,dis5 pbs *  n dpae ps u volume d `100 li)5  l !x aoci. ? dd;re ' -bin/s d m^,dis5 g maximise l !x. un !r mthode appele ?chargementglouton* :siste  )i( @ m^,dis5 4 l'or4e d:4 d l !x volumiq (ratio !x/
volume), ! )pt( ? !iorit @ m^,dis5 ac l 6 7 !x volumiq. * un m^,dise 5 )p voluminse  2) )pte,  5s/e ac ' m^,dise ay l !x volumiq jt *f, c jq' c q'kn m^,dise n p;e r?)(. ai, ? not4
?v-restant* l volume .ponie  ?m-i* ' `(i!1)^e m^,dise un fs @ m^,dis5 )i5, l'algorithme pt s':ire:
?chargementglouton
n `" nombre de marchandises
pour i allant de `0  `n-1 faire
 si volume de m-i
`2" v-restant alors
 charger m-i
 v-restant
`" v-restant
`- volume de m-i
transporter le chargement prvu* l )i 4 l'or4e d:4 ds !x volumiqs dne `m?1, `m?2, `m?1, `m?4. * l moy? d )pt accepte `100 li)5 d ^gem2, l'algorithme ^ge `m?3  `m?1  u !x d `200 e ( -par( ac ' -bin/s )8ve !cd@m2  maximis( l !x).
p ' s;te,  rapp q 4 l'96m?t1 python, @ m^,dis5 9t dfini5 p ds *st,c5 d ' 3ae ?marchandise*.
 dne qqs qalificatifs: diotomiq, @8t, 7aphiq, *s(t0, maximum, rcursif, )i.
`6. *diq(,  justific1, l qalificatif g s'ap6iq l mx  l'algorithme !cd2.
po `7
`7. 'copi(  -6t( ' f ?tri(tab: list) --@ none* ci-de8s af q'z )ie ? 6c u taek :ten4 ds ojs d ty ?marchandise* sel l'or4e d:4 ds ratios. ai, ?tab(`0)b* dt :tn ' m^,dise ac l 6 hkt ratio !x/volume a! l'appel ?tri(tab)*. def tri(tab: list) --@ none:
n `" len(tab)
for i in range(`1, n):
marchandise `" tab(i)b
j `" `i-1
while `-' and `-' @ `-':
tab(j`!1)b `" `-'
j `" `-'
tab(j`!1)b `"
marchandise `8.  justifi(, !cis( l nw d c )i, ai q 9 co5t tpl 4 l pire ds cas (:st4, logarithmiq, lin/re, qasi-lin/re `(n log?2 n), qa4atiq, cubiq 8 xpon?tiel).
`9. 'copi(  -6t( ' f ?charge* s;v,te g ap6iq l'algorithme ?chargement
@8t* d:it 6 hkt.
def charge(tab: list, volume: int) --@ list:
tri(tab)
chargement `" ()b
n `" len(tab)
for `-'
if `-'
`-'
`-'
return `-'
p^tie c: r,gem2 optimis p rcursivit
l'algorithme !cd2 n r?ve ps tj un solut0 optimale.  pt dc s;vre u algorithme rcursif.  note `n l nb d m^,dis5   s8h/te 96m?t( ' f rcursive ?chargeoptimale* d'?t2te:
?chargeoptimale(tab: list,  v-restant: int, i: int)  --@ list*
u appel  ct f dt p(m) d calcul( ' ^ge optimale  u )pt d volume
?v-restant* utilis4 @ m^,dis5  p^tir d l'*dice ?i*:
-- * ?i @`" n*, tts @ m^,dis5 t " 5say5  i n'? 'ste 6 d'k)s .poni5. l'appel rcursif r?ve ' liste vide;
-- * ?i 2 n*  ' m^,dise d'*dice ?i* 5 d volume s)ictm sp k volume 'st4, l'appel rcursif r?ve l rsultat d l'appel effectu ac l 2 volume 'st4 x ac ' m^,dise s;v,te, c'e--d ?chargeoptimale(tab,
v-restant, i`!1)*;
po `8
-- * ?i 2 n*  ' m^,dise d'*dice ?i* 5 d volume *f 8 g k volume 'st4, i existe dx opt0s pbs:
-- opt0 `1:
st  utilise ' m^,dise ?i*, kql cas l ^gem2 :t.4a ct m^,dise  cls ( rsultat d l'appel rcursif  p^tir d ' !n m^,dise  d'u volume 'st4 s)ictm *f,
-- opt0 `2:
st  n'utilise ps ' m^,dise ?i*, kql cas l ^gem2 sera l rsultat d l'appel rcursif ac l 2 volume 'st4 x  p^tir d ' m^,dise s;v,te.
 gd l'opt0 d ^gem2 g maximise l !x )pt.
`10. -6t( l code d ' f ?chargeoptimale* dt l !c a " d:it ci-av. def chargeoptimale(tab: list, v-restant: int, i: int) if i @`" `-':
return `-'
else:
if tab(i)b.volume 
@ v-restant:
return
chargeoptimale(tab, v-restant, i`!1)
else:
option`1 `" chargeopti
male(tab, `-', `-')
option`2 `" (tab(i)b)b `! chargeoptimale(
tab, `-', `-')
if prixliste(option`1)
@ prixliste
(option`2):
return `-'
else:
return `-'
po `9
x( `3 (`8 pts)
3 x( pte h ' !7amm1 or.te oj, @ 7aph5  utilise ' s)ucture d dn5 dict0n/re.
' direct0 d ' st1 d ski l livre ,c, spcialise 4 ' !t ( ski d fd, s8h/te .pos( d'u logiciel 0 p(mew4 d gr( k mx 9 dom/ne ski. z :fie  u dvelopp *fmatiq ' m0 d :cevr c logiciel. celui-ci dcide d caractris( @ pist5 d ski  l'/de d'un 3ae ?piste*  l dom/ne d ski p un 3ae ?domaine*.
l code python d cs dx 3a5 5 dn ? ,nexe.
p^tie a: analyse ds 3a5 ?piste*  ?domaine*
`1. list( @ at)ibuts d ' 3ae ?piste* ? !cis4 l ty.
' dft ds pist5 d ski d fd 5 '!s?te p `4 c8ls: v(te, e, r8ge  nre. ' piste v(te 5 :sidre cm )s fc, ' piste e cm fc, ' piste r8ge d dft moy?ne  ' piste nre df. 4 ' st1 d ski l livre ,c, l'qipe d direct0 dcide d s'appuy( uqm h l dnivel  at)ibu( ' c8l d'un piste d ski.
ai, un piste d ski sera d c8l:
-- '?noire*' * 9 dnivel 5 sp 8 g  `100 m)5;
-- '?rouge*' * 9 dnivel 5 s)ictm *f  `100 m)5, x sp 8 g  `70 m)5;
-- '?bleue*' * 9 dnivel 5 s)ictm *f  `70 m)5, x sp 8 g  `40 m)5;
-- '?verte*' * 9 dnivel 5 s)ictm *f  `40 m)5.
`2. :ire ' mthode ?set-couleur* d ' 3ae ?piste* g p(met d'affect(  l'at)ibut ?couleur* ' a3ne d cs crespd4  ' c8l d ' piste.
 excute ! l !7amme s;v4 af d'at)ibu( ' c8l adqate  n ds pist5 ( dom/ne ski l livre ,c.
`1 for piste in lievre-
blanc.get-pistes():
`2 piste.set-couleur()
po `10
`3. *diq(, pm @ `4 !9s ci-de8s, l ty d l'l r?voy p l'*s)uct0 python ?lievre-blanc.get- pistes()*.
-- !9 a: un a3ne d cs;
-- !9 b: u oj d ty ?piste*;
-- !9 c: un liste d a3n5 d cs;
-- !9 d: un liste d'ojs d ty ?piste*.
? r d'u m,q d'?neigem2, ' direct0 d ' st1 5 sv :)a*te d f(m( tts @ pist5 v(t5 c^ zs 9t situ5 gnm ? bas ( dom/ne.
`4. :ire u !7amme python dt l'excut0 p(met d !cd(  ' f(meture d tts @ pist5 v(t5 ? affect4 ' v ?false*  l'at)ibut ?ouverte* ds pist5 :c(n5.
`5. :ire un f ?pistes-de-couleur* !en4  param)5 un a3ne d cs ?couleur* '!s?t4 ' dft d'un piste  un liste ?lst* d pist5 d ski d fd. ct f r?ve ' liste ds nws ds pist5 dt ?couleur* 5 l nivek d dft.
ex@6e: l'*s)uct0 ?pistes-de- couleur(lievre-blanc.get- pistes(), 'noire')* renvoie la liste ?('petit bonheur', 'for2t', 'duvallon')b*.
u sk`r d b nivek s !pare aid5m2  l ! semi-marath, d'un .tc d `21,1 kilom)5.  q ?)a3nem2, i note ' liste ds nws ds pist5 q'i a p^c8ru5  i s8h/te .pos( d'u 8til 0 *diq4 * ' .tc totale p^c8rue 5 k m* ge  ' .tc q'i devra p^c8rir l jr ( semi-marath.
' f ?semi-marathon* dne
ci-de8s rpd kx aw?t5 ( sk`r: ct f !?d ? param)e un liste ?l* d nws d pist5  r?ve u bool? g  ?true* * ' .tc totale p^c8rue 5 s)ictm spe  `21,1 kilom)5, ?false* sin.
`1 def semi-marathon(l):
`2 distance `" `-'
`3 liste-pistes `"
lievre-blanc.
get-pistes()
`4 for nom in l:
`5 for piste in
liste-pistes:
`6 if piste.get-nom()
`"" `-':
`7 distance `"
distance `! `-'
`8 return `-'
po `11
 dne ci-de8s dx ex@65 d'appels  ct f:
@@@ entrainement`1 `"  ('verneys', 'chateau  enneig', 'rois mages',  'diablotin')b
@@@ semi-marathon
(entrainement`1)
true
@@@ entrainement`2 `"  ('esseillon', 'aigle  royal', 'duvallon')b
@@@ semi-marathon( entrainement`2)
false `6. 'copi(  -6t( ' f
semi-marathon.
p^tie b: '(e p fo ;ute
l 6an ds pist5 ( dom/ne l livre ,c pt 2) '!s?t p l 7aphe s;v4:
fg `1: 7aphe ( dom/ne l livre ,c
`;vr ' 6,e tactile no`2
' h q ar2te,  a *diq l nw d ' piste  sa lgu ? kilom)5. @ swmets crespd2  ds post5 d secs.
u pist-sec8riste d p(man?ce k pt d secs d 5 appel  un *t(v?t0 ? urg?ce k pt d secs a. ' motoneige d ' st1 t ? p,ne, i n pt s'y r?4e q'? skis d fd. i dcide d minimis( ' .tc p^c8rue  (e  savr ql 5 l ml p^cs pb.  l'/d(  rp4e  c !me,  dcide d'96m?t( l 7aphe ci-deus 7c k dict0n/re d dict0n/r5 s;v4:
domaine `" ``(
'a': ``('g': `7.5,
'h': `6.8)'',
'b': ``('c': `3.0,
'd': `9.2, 'e': `1.8, 'f': `4.6)'',
'c': ``('b': `3.0,
'd': `2.5, 'e': `6.1, 'g': `10.7)'',
'd': ``('b': `9.2,
'c': `2.5)'',
'e': ``('b': `1.8,
'c': `6.1, 'f': `10.1, 'g': `12.7)'',
'f': ``('b': `4.6,
'e': `10.1, 'g': `2.6, 'h': `3.4)'',
'g': ``('a': `7.5,
'c': `10.7, 'e': `12.7, 'f': `2.6, 'h': `5.5)'',
'h': ``('a': `6.8,
'f': `3.4, 'g':
`5.5)'')''
po `12
`7. :ire un *s)uct0 python p(mew4 d'affi( ' lgu d ' piste a4 ( swmet '?e*' k swmet '?f*'.
`8. :ire un f ?voisins* g !?d ? param)5 u 7aphe ?g*  u swmet ?s* ( 7aphe ?g*  g r?ve ' liste ds vs*s ( swmet ?s*.
ex@6e: l'*s)uct0
?voisins(domaine, 'b')* r?ve ' liste ?('c', 'd', 'e', 'f')b*.
`9. 'copi(  -6t( ' f ?longueur-chemin* dne ci-de8s: ct f !?d ? param)5 u 7aphe ?g*  u m ( 7aphe ?g* ) ' fme d'un liste d swmets  r?ve sa lgu ? kilom)5.
ex@6e: l'*s)uct0
?longueur-chemin(domaine, ('b', 'e', 'f', 'h')b)* r?ve l nb 2ow4 ?`15.3*.
`1 def longueur-chemin(g,
chemin):
`2 precedent `" `-'
`3 longueur `" `0
`4 for i in range
(`1, len(chemin)):
`5 longueur
`" longueur `! `-'
`6 precedent `" `-'
`7 return `-'
 dne ci-de8s un f ?parcours* g r?ve ' liste d w @ ms ( 7aphe ?g* p^t4 ( swmet ?depart*  p^c8r4 @ swmets d fa uq, c'e--d q'u swmet 5 awe*t k 6 un fs 4 u m.
pe, l'appel ?parcours(domaine, 'a')* r?ve ' liste d w @ ms p^t4 ( swmet a 4 l 7aphe ?domaine*  s s8ci( ni d ' lgu ( m, ni ( swmet d'^rive. ai, ?('a', 'g', 'c')b* 5 u m pb, 1 cm ?('a', 'g', 'c', 'b', 'e', 'f', 'h')b*.
`1 def parcours(g, depart,
chemin `" ()b, lst-
chemins `" ()b):
`2 if chemin `"" ()b:
`3 chemin `" (depart)b
`4 for sommet in voi
sins(g, depart):
`5 if sommet not in
chemin:
`6 lst-chemins 
.append(chemin
`! (sommet)b)
`7 parcours(g, sommet,
chemin `!
(sommet)b)
`8 return lst-chemins
`10. x6iq( ?  ' f ?parcours* 5 un f rcursive.
u appel  ' f ?parcours* !cd?te r?ve un liste d ms 4 lll figur2 ds d8s.
`11. 'copi(  -6t( ' f ?parcours-dep -arr* ci-a! g r?ve ' liste ds ms p^t4 ( swmet ?depart*  s t(min4 p l swmet ?arrivee* 4 l 7aphe ?g* ?)s ? param)5. ' liste r?voye n dt ps -pt( d d8s. at, 6s l"s d code 9t ncs.
po `13
`1 def parcours-dep-arr(g, depart, arrivee):
`2 liste `" parcours(g,
depart)
`3 `-'
`12. 'copi(  -6t( ' f ?plus-court* dne ci-de8s. ' f ?plus-court* !?d  param)5 u 7aphe ?g*, u swmet d dp^t ?depart*  u swmet d'^rive
?arrivee*; z r?ve u ds ms @ 6 cts ) ' fme d'un liste d swmets. `1 def plus-court(g,
depart, arrivee):
`2 liste-chemins `" 
parcours-dep-arr( 
g, depart, arrivee)
`3 chemin-plus-court 
`" `-'
`4 minimum `"
longueur-chemin(g,
chemin-plus-court)
`5 for chemin in
liste-chemins:
`6 longueur `"
longueur-chemin(g,
chemin)
`7 if `-':
`8 minimum `" `-'
`9 chemin-plus-court
`" `-'
`10 return chemin-plus-
court
`13. x6iq( ?  l x f3 p l pist-sec8riste d sir ' .tc minimale  ^riv( l 6 rapidem2 pb h l l` d l'*cid2 5 .cut. !pos( u ml :itre d x.
po `14
,nexe
`1 0 pistes
`2 class piste:
`3 def --init--(self,
nom, denivele,
longueur):
`4 self.nom `" nom
`5 self.denivele
`" denivele 0 en
mtres
`6 self.longueur `"
longueur
0 en kilomtres
`7 self.couleur `" ''
`8 self.ouverte `" true
`9 def get-nom(self):
`10 return self.nom
`11 def get-longueur(self):
`12 return self.longueur
`13 def set-couleur(self):
`14 0  complter
`15 def get-couleur(self):
`16 return self.couleur
`17 0 domaine skiable
`18 class domaine:
`19 def --init--
(self, a):
`20 self.nom `" a
`21 self.pistes `" ()b
`22 def ajouter-piste(self,
nom-piste, denivele,
longueur):
`23 self.pistes.append( 
piste(nom-piste,
denivele, longueur))
`24 def get-pistes(self):
`25 return self.pistes
`26 0 programme principal
`27 lievre-blanc `"
domaine("le livre
blanc")
`28 lievre-blanc 
.ajouter-piste(
'aveyrole', `62, `9.2)
`29 lievre-blanc 
.ajouter-piste(
'verneys', `10, `2.5)
`30 lievre-blanc 
.ajouter-piste(
'vincendires', `45, `3)
`31 lievre-blanc 
.ajouter-piste(
'ribon', `70, `6.1)
`32 lievre-blanc 
.ajouter-piste(
'esseillon', `8, `1.8)
`33 lievre-blanc 
.ajouter-piste(
'petit bonheur', `310,
`4.6)
`34 lievre-blanc 
.ajouter-piste(
'aigle royal', `85,
`10.1)
`35 lievre-blanc 
.ajouter-piste(
'ch1teau enneig', `54,
`10.7)
`36 lievre-blanc 
.ajouter-piste(
'sallanches', `78, `12.7)
`37 lievre-blanc 
.ajouter-piste(
'for2t', `145, `2.6)
po `15
`38 lievre-blanc 
.ajouter-piste(
'hermine', `27, `7.5)
`39 lievre-blanc 
.ajouter-piste(
'rois mages', `42, `5.5)
`40 lievre-blanc 
.ajouter-piste(
'diablotin', `76, `6.8)
`41 lievre-blanc 
.ajouter-piste(
'duvallon', `200, `3.4)

